package gestordeentidades.identitymap.interfaces;

import gestordeentidades.persistance.DataBaseObject;

/**
 * Trabalho DAS - 2014/2015
 * @author a21210380, a21190325, a21210392
 */
public interface IUnityOfWork {

    /**
     * Regista uma entidade como nova no sistema para persistir.
     * Também inser a entidade do IEntityMap
     * @param <T> extends DataBaseObject para se ter acesso ao id do objecto
     * @param entidade
     * @return 
     */
    public <T extends DataBaseObject> boolean registarNovaEntidade(T entidade);

    /**
     * Regista uma entidade como modificada no sistema para persistir
     * @param <T> extends DataBaseObject para se ter acesso ao id do objecto
     * @param entidade
     */
    public <T extends DataBaseObject> void registarEntidadeModificada(T entidade);

    /**
     * Regista uma entidade como apagada no sistema para persistir.
     * Também remove a entidade do IEntityMap
     * @param <T> extends DataBaseObject para se ter acesso ao id do objecto
     * @param entidade
     */
    public <T extends DataBaseObject> void registarEntidadeApagada(T entidade);

    /**
     * Persistir os registos efectuados
     */
    public void commit();

    /**
     * Apagar os registos efectuados
     */
    public void rollback();
}
